home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Joystick Magazine 1996 May
/
cd joy 71No13.iso
/
pc
/
demos
/
eurosoc
/
source
/
foot.cpp
< prev
next >
Wrap
C/C++ Source or Header
|
1996-03-07
|
13KB
|
617 lines
/******************************************************************************
******************************************************************************/
//
// Actua Soccer. (Token Main Routine) 1.9.94
//
// Programmed by Andy Findlay.
//
/******************************************************************************
******************************************************************************/
#include <stdlib.h>
#include <stdio.h>
// Audio includes...
#include "config.h" // Config file
#include "basemem.h" //
#include "sos.h" // SOS stuff
#include "timer.h" // Timers for Audio
#include "digi.h" // Digital Sound
#include "midi.h" // MIDI Sound
#include "audio.h" // SOS header
#include "global.h"
#include "3deng.h"
#include "defines.h"
#include "mouse.h"
#include "front.h"
#include "eurofrnt\euro_int.h"
#include "mallocx.h"
#ifdef ECTS
extern void write_config_file();
#endif
struct goal_info
{
char used;
int scorer;
int time;
};
typedef struct
{
goal_info goal_data;
} goal_table;
goal_table goals[3*32]={0,0,0};
extern void claim_key_int(void);
extern void release_key_int(void);
extern char practice;
// NETWORK.C
extern "C" void read_joystick(char j,int *x, int *y, int *sw);
extern "C" void read_joy1(int *x, int *y, int *sw);
extern "C" void read_joy2(int *x, int *y, int *sw);
extern "C" void calibrate_joy(char j,unsigned short *x,unsigned short *y);
extern "C" void calibrate_logpad(unsigned short *x,unsigned short *y);
extern "C" void get_joy_dir1(int *x,int *y,int *f);
extern "C" void get_joy_dir2(int *x,int *y,int *f);
extern "C" void get_user_inputs();
extern "C" void process_user_inputs();
extern "C" volatile int Teams[MAX_NET_USERS],Players[MAX_NET_USERS];
extern "C" volatile int net_quit;
extern "C" volatile char paused;
extern "C" volatile char pause_request;
extern "C" volatile char keys[256];
extern "C" volatile char key_togs[256];
extern "C" unsigned char machine_no;
extern "C" void NetTest(void);
extern "C" void Network_Play_Ready(void);
extern "C" void Quit_Network_Play(void);
extern "C" void __far nethandler(void);
extern "C" unsigned int NetworkHandle;
extern "C" short wConsoleNode;
extern "C" int network_on;
extern "C" volatile int count;
extern "C" volatile int tick;
extern "C" volatile int ftick;
extern "C" volatile int writeptr;
extern "C" volatile int readptr;
extern "C" int game_speed; // Currently declared in network.c
extern "C" char old_mf;
extern "C" char logpad_on;
extern "C" char joystick1_on;
extern "C" char joystick2_on;
extern "C" unsigned short joy1_cnt_x,joy1_cnt_y;
extern "C" unsigned short joy2_cnt_x,joy2_cnt_y;
extern "C" int joy1_max_x,joy1_max_y,joy1_min_x,joy1_min_y;
extern "C" int joy2_max_x,joy2_max_y,joy2_min_x,joy2_min_y;
extern "C" char calibrated_1,calibrated_2;
// Externed game functions...
extern void add_team_user(short t,short c);
extern void add_fixed_user(short p,short c);
extern void init_keyboard();
extern void init_users();
extern void init_team();
extern short conv_conts_back(char c);
extern setup_info setup;
extern short rand_seed;
extern int match(int argc, char **argv);
match_data match_info;
extern team_info game_data[];
extern int players;
extern int avg1_rate,avg1_power,avg1_bcontrol,avg1_flair,
avg1_vision,avg1_accuracy,avg1_fitness,avg1_disc;
extern int avg2_rate,avg2_power,avg2_bcontrol,avg2_flair,
avg2_vision,avg2_accuracy,avg2_fitness,avg2_disc;
extern char audio_version;
extern char need_result;
extern short injury_time;
extern "C" int num_of_users; // Currently in network.c
extern char say_names;
extern "C" volatile char net_half;
extern "C" void foot_init_net();
extern "C" void foot_uninit_net();
extern int performance;
int w95;
short no_front_users;
/******************************************************************************
*****************************************************************************/
void mem_test()
{
int i=get_mem_info();
printf("Free memory = %d\n",i);
setup.M8=(i>=MEM8);
if (setup.verbose)
if (setup.M8)
puts("Initialising 8 meg game");
else
{
puts("Initialising 4 meg game");
printf("Need to free %d more bytes to run 8 meg version\n",MEM8-i);
}
}
/******************************************************************************
*****************************************************************************/
int go_audio()
{
// Initialise Audio Config...
if(ReadConfigFile())
{
printf("Error! Cannot read Config File.\n");
return(EXIT_FAILURE);
}
if(InitialiseDIGI(22050,IDF_VERBOSE)) // Initialise Digital Sound Drivers
return(EXIT_FAILURE);
return(FALSE);
}
/******************************************************************************
******************************************************************************/
// Process command line options...
void get_command_line(int argc, char **argv)
{
short opt,id;
for (int i=1; i<argc; i++)
{
opt=-1;
id=100;
// Look for switch!
if (!strcmp(argv[i],"-i"))
// Inputs...
{
if (!strcmp(argv[i+1],"j1"))
opt=JOY1_CTRL;
if (!strcmp(argv[i+1],"j2"))
opt=JOY2_CTRL;
if (!strcmp(argv[i+1],"k1"))
opt=KEY1_CTRL;
if (!strcmp(argv[i+1],"k2"))
opt=KEY2_CTRL;
if (!strcmp(argv[i+1],"m"))
opt=MOUSE_CTRL;
if (!strcmp(argv[i+1],"lp"))
opt=LOGPAD_CTRL;
if (!strcmp(argv[i+1],"g1"))
opt=GRAV1_CTRL;
if (!strcmp(argv[i+1],"g2"))
opt=GRAV2_CTRL;
if (!strcmp(argv[i+1],"n"))
opt=NET_CTRL;
if (opt>0)
// Look for user id!
{
if (!strcmp(argv[i+2],"a"))
id=TEAM_A;
else
if (!strcmp(argv[i+2],"b"))
id=TEAM_B;
else
{
id=atoi(argv[i+2]);
if ((id<1) || (id>players) || (id==1) || (id==12))
id=100;
}
i+=2;
}
if (id==100)
i=argc;
else
{
if (id<0)
{
if (id==-1)
game_data[setup.team_a].player_control+=1<<no_front_users;
else
game_data[setup.team_b].player_control+=1<<no_front_users;
match_info.control_methods[no_front_users++]=conv_conts_back(opt);
}
else
add_fixed_user(id,opt);
#ifndef FRONT_END
if (opt==JOY1_CTRL)
joystick1_on=TRUE;
if (opt==JOY2_CTRL)
joystick2_on=TRUE;
if (opt==LOGPAD_CTRL)
logpad_on=TRUE;
#endif
}
}
if (!strcmp(argv[i],"-s"))
// Stats...
{
if (!strcmp(argv[i+1],"ds"))
opt=0;
if (!strcmp(argv[i+1],"vi"))
opt=1;
if (!strcmp(argv[i+1],"bc"))
opt=2;
if (!strcmp(argv[i+1],"sp"))
opt=3;
if (!strcmp(argv[i+1],"fl"))
opt=4;
if (!strcmp(argv[i+1],"ac"))
opt=5;
if (!strcmp(argv[i+1],"pp"))
opt=6;
if (!strcmp(argv[i+1],"st"))
opt=7;
if (opt>=0)
{
if (!strcmp(argv[i+2],"a"))
{
int avg=atoi(argv[i+3]);
if (avg>0 && avg<129)
{
id=0;
switch(opt)
{
case(0):
avg1_disc=avg;
break;
case(1):
avg1_vision=avg;
break;
case(2):
avg1_bcontrol=avg;
break;
case(3):
avg1_rate=avg;
break;
case(4):
avg1_flair=avg;
break;
case(5):
avg1_accuracy=avg;
break;
case(6):
avg1_power=avg;
break;
case(7):
avg1_fitness=avg;
break;
}
}
}
else
{
if (!strcmp(argv[i+2],"b"))
{
int avg=atoi(argv[i+3]);
if (avg>0 && avg<129)
{
id=0;
switch(opt)
{
case(0):
avg2_disc=avg;
break;
case(1):
avg2_vision=avg;
break;
case(2):
avg2_bcontrol=avg;
break;
case(3):
avg2_rate=avg;
break;
case(4):
avg2_flair=avg;
break;
case(5):
avg2_accuracy=avg;
break;
case(6):
avg2_power=avg;
break;
case(7):
avg2_fitness=avg;
break;
}
}
}
}
}
else
id=100;
if (id==100)
i=argc;
else
i+=3;
}
if (!strcmp(argv[i],"-r"))
// Random seed...
{
#ifdef ECTS
machine_no=atoi(argv[i+1]);
#else
rand_seed=atoi(argv[i+1]);
#endif
}
if (!strcmp(argv[i],"-a"))
// Choose team...
{
setup.team_a=atoi(argv[i+1]);
}
if (!strcmp(argv[i],"-b"))
// Choose team...
{
setup.team_b=atoi(argv[i+1]);
setup.team_b_kit=atoi(argv[i+1]);
}
}
}
/*
void GOAL_SCORED(int t,int s,int tm)
{
}
*/
/******************************************************************************
*****************************************************************************/
void SubstituePlayers(int a,int b,int c)
{
}
/******************************************************************************
*****************************************************************************/
/* Front End Emulator */
extern char var_start,var_end;
extern void init_joys();
void test_w95()
{
//
union REGS regs;
struct SREGS sregs;
memset(&sregs,0,sizeof(sregs)); //clr sregs
regs.w.ax=0x1600;
int386x(0x2F,®s,®s,&sregs);
w95=regs.w.ax & 0xff;
if (w95==3 || w95==4)
{
//running in windows 95!!!
if (setup.verbose)
printf("Running windows 95 version\n");
w95=TRUE;
}
else
{
if (setup.verbose)
printf("Running DOS version\n");
w95=FALSE;
}
}
int main(int argc, char **argv)
{
w95=0; // Windows flag!
test_w95();
no_front_users=0;
num_of_users=0;
init_joys();
performance=31; // Pentium speed!
setup.team_a=36;
setup.team_b=1;
setup.team_b_kit=1;
setup.stadium=setup.team_b;
setup.start_res=0;
setup.vidi_type=0; // 0=norm, 1=filtered
setup.verbose=0;
setup.screen_size=0;
setup.detail.stadia=1; // 0=simple,1=complex
setup.detail.pitch=2; // 0=simple,1=lo,2=hi
setup.detail.sky=1; // 0=off,1=on
setup.detail.players=1; // 0=simple,1=full
setup.detail.lines=1; // 0=simple,1=full
setup.detail.shadows=1; // 0=simple,1=full
#ifdef ONE_MACHINE
// game_data[setup.team_a].player_control=1;
// game_data[setup.team_b].player_control=2;
// match_info.control_methods[0]=2;
// match_info.control_methods[1]=0;
#else
game_data[setup.team_a].player_control=0;
game_data[setup.team_b].player_control=0;
#endif
#ifdef ECTS
setup.M8=1;
#else
mem_test();
#endif
#ifdef MEG4
setup.M8=0;
#endif
// setup.M8=0;
// Setup Subs...
for (int i=11; i<15; i++)
{
game_data[setup.team_a].players[i].flags=1;
game_data[setup.team_b].players[i].flags=1;
}
InitialiseTimer(); // Initialise timers for sound drivers
EUROmatch_info.camera=0;
EUROmatch_info.audio=FALSE;
EUROmatch_info.timeit=FALSE;
EUROmatch_info.offside=TRUE;
EUROmatch_info.bookings=TRUE;
EUROmatch_info.freekicks=TRUE;
EUROmatch_info.substitutes=TRUE;
EUROmatch_info.time=3;
EUROmatch_info.tac_1=0;
EUROmatch_info.tac_2=0;
match_info.CompetitionType=2;
// match_info.CompetitionType=PRACTICE;
// match_info.CompetitionType=PENALTIES;
EUROmatch_info.crowd=0x1fff; // Crowd noise level!
EUROmatch_info.pitch=0x7fff; // Pitch noise level!
EUROmatch_info.commentary=0x7fff; // Commentary level!
EUROmatch_info.master=0x7fff; // Master noise level!
EUROmatch_info.referee_vision=120;
EUROmatch_info.referee_discipline=80;
EUROmatch_info.rand=3523;
match_info.GameType=0; // 0 Arcade 1 Simulation...
match_info.referee=0;
EUROmatch_info.wind=0;
// EUROmatch_info.tga_enable=TRUE;
net_half=1; // Network game time...
say_names=TRUE;
audio_version=EUROmatch_info.audio;
if (audio_version)
{
if (go_audio())
{
UnInitialiseTimer();
return(FALSE);
}
}
network_on=0;
// Timer stuff...
ftick=0;
tick=0;
count=0;
game_speed=REAL_SPEED;
readptr=writeptr=0;
AddTimer(TIMER_SPEED,nethandler,NetworkHandle);
injury_time=0;
claim_key_int();
init_users();
init_team();
machine_no=1;
get_command_line(argc,argv);
InitMouse();
init_keyboard();
if (logpad_on)
calibrate_logpad(&joy1_cnt_x,&joy1_cnt_y);
if (joystick1_on)
{
calibrate_joy(0,&joy1_cnt_x,&joy1_cnt_y);
calibrated_1=TRUE;
#ifdef ECTS
write_config_file();
#endif
}
if (joystick2_on)
{
calibrate_joy(1,&joy2_cnt_x,&joy2_cnt_y);
calibrated_2=TRUE;
#ifdef ECTS
write_config_file();
#endif
}
#ifndef NET_GAME
old_mf=TRUE;
#else
old_mf=FALSE;
#endif
#ifdef NET_GAME
foot_init_net();
#endif
/**** Call Game ****/
match(argc,argv);
#ifdef NET_GAME
foot_uninit_net();
#endif
RemoveTimer(NetworkHandle);
if (audio_version)
{
UnInitialiseDIGI(); // Uninitialise SOS
}
UnInitialiseTimer();
release_key_int();
return(0);
}